package com.njtech.pet.service;


import com.njtech.pet.dto.CouponDto;
import com.njtech.pet.entity.Bill;
import com.njtech.pet.entity.Item;
import com.njtech.pet.entity.User;

import java.util.Date;
import java.util.List;

/**
 * Author:cw
 * Date:2020-03-16 17:49
 * Description:会员操作
 */

public interface MemberService {
    /**
     * 计算对应会员的等级的价格或者积分,type = 1时计算折扣价格，type = 2时计算积分
     * @param type
     * @param PC
     * @param user
     * @return 返回计算后的结果
     */
    double levelPC(int type, double PC, User user);

    /**
     * 计算折扣后的价格
     * @param item
     * @param user
     * @param coupon 优惠卷
     * @return 打折且使用优惠卷后的价格
     */
    double priceDiscount(Item item, User user, Item coupon);

    /**
     * 每日签到
     * @param user
     * @return 返回是否签到成功，true为成功，false为失败
     */
    boolean signIn(User user);

    /**
     * 判断用户是否能够首签
     * @param user 用户
     * @return 返回能否首签
     */
    boolean ifFirstSignInDaily(User user);

    /**
     *领取优惠卷
     * @param user 领取者账号
     * @param item 优惠卷
     * @return 返回是否领劵成功，true为成功，false为失败
     */
    boolean getCoupon(User user, Item item);

    /**
     * 购买或续费会员
     * @param user
     * @return 返回是否购买，续费成功，true为成功，false为失败
     */
    boolean getMember(User user);

    /**
     * 判断是否是会员
     * @param user
     * @return 返回是否是会员，true为是，false为不是
     */
    boolean ifMember(User user);

    /**
     * 判断优惠券是否到期
     * @param bill
     * @return true为到期，false为没有到期
     */
    boolean ifCouponExpire(Bill bill);

    /**
     * 判断会员等级是否提升
     * @param user
     * @return 积分超出当前会员等级上限，提高会员等级返回true，反之返回false
     */
    boolean ifUpgradeMember(User user);

    /**
     * 显示返回会员等级
     * @param user
     * @return 会员等级
     */
    String showLevel(User user);

    /**
     * 显示用户所拥有的优惠券
     * @param user
     * @return 返回所拥有的优惠券
     */
    List<Item> showMyCoupon(User user);

    /**
     * 显示会员到期的时间
     * @param user
     * @return 返回到期时间
     */
    String showExpireDate(User user);

    /**
     * 显示用户对应VIP等级的等级名、下限、上限、折扣系数、积分系数
     * @param user
     * @return 返回按此顺序排序的list数组
     */
    List<String> showLevelInfo(User user);

    /**
     * 随机展示优惠券
     * @param user
     * @return 优惠券
     */
    List<Item> showCoupon(User user);

    /**
     * 购买保险使用优惠券时，生成对应的bill
     * @param user 优惠券使用人
     * @param coupon 所使用的优惠卷
     * @param item 对应保险
     * @return 返回生成的bill数量
     */
    Integer useCoupon(User user, Item coupon ,Item item);

    /**
     * 管理界面显示所有优惠卷信息
     * @return 优惠卷list
     */
    List<Item> showAllCoupon();

    /**
     * 管理界面添加优惠卷
     * @param coupon
     * @return 返回是否成功
     */
    boolean insertCoupon(Item coupon);

    /**
     * 管理界面修改优惠卷信息
     * @param coupon
     * @return 返回是否成功
     */
    boolean updateCoupon(Item coupon);
}
